package com.atguigu.lease.web.admin.schedule;

import com.atguigu.lease.model.entity.LeaseAgreement;
import com.atguigu.lease.model.enums.LeaseStatus;
import com.atguigu.lease.web.admin.service.LeaseAgreementService;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;


import java.util.Date;

@Component
@Slf4j
public class ScheduledTasks {
    @Autowired
    private LeaseAgreementService leaseAgreementService;
    /*
    这个cron定时任务是spring自带的，也可以使用阿里的Quartz

     */
    @Scheduled(cron ="0/5 0 0 1 2 ? " ) //定时功能
    public void  updateLeaseStatus(){
        log.info("定时任务执行");
        //当结束租约的日期是今天就把状态改为已到期
        Date now = new Date();
        LambdaUpdateWrapper<LeaseAgreement> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(LeaseAgreement::getLeaseEndDate,now).set(LeaseAgreement::getStatus, LeaseStatus.EXPIRED);
        leaseAgreementService.update(updateWrapper);
/*
斜线(/):表示递增，例如使用在秒域上 0/15 表示每 15 秒
问号(?):只能用在日和周域上，但是不能在这两个域上同时使用。表示不指定，例如想在每月的 20 日触发调度不管 20 日到底是星期几，则只能使用如下写法: 13 13 15 20*?,其中最后一位只能用?，而不能使用*，如果使用表示不管星期几都会触发，实际上并不是这样。
井号(#):只能使用在周域上，用于指定月份中的第几周的哪一天，例如 6#3，意思是某月的第三个周五 (6=星期五，3 意味着月份中的第三周)
L:某域上允许的最后一个值。只能使用在日和周域上。当用在日域上，表示的是在月域上指定的月份的最后一天。用于周域上时，表示周的最后一天，就是星期六
W:W字符代表着工作日(星期一到星期五)，只能用在日域上，它用来指定离指定日的最近的一个工作日
 */

    }
}
